home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / examples / object / obj_vol.pro < prev    next >
Text File  |  1997-07-08  |  3KB  |  91 lines

  1. ;------------------------------------------------------------
  2. ; This procedure file defines the procedure obj_vol, which
  3. ; is used as an example in Chapter 12 of _Objects and Object
  4. ; Graphics_. Note that the routine breaks several times and
  5. ; asks for user input before proceeding.
  6. ;-------------------------------------------------------------
  7.  
  8. PRO obj_vol
  9.  
  10. ; Create volume data descriptions.
  11. data = BYTARR(64, 64, 64)
  12. FOR i=0, 63 do data[*, i, 0:i] = i*2
  13. data[5:15, 5:15, 45:55] = 128
  14. data[45:55, 45:55, 5:15] = 255
  15.  
  16. ; Create a volume object.
  17. myvolume = OBJ_NEW('IDlgrVolume', data)
  18.  
  19. ; Scale volume object into normalized coordinates.
  20. cc = [-0.5, 1.0/64.0]
  21. myvolume -> SetProperty, XCOORD_CONV=cc, YCOORD_CONV=cc, ZCOORD_CONV=cc
  22.  
  23. ; Set volume object properties.
  24. myvolume -> SetProperty, ZERO_OPACITY_SKIP=1
  25. myvolume -> SetProperty, ZBUFFER=1
  26.  
  27. ; Create object hierarchy.
  28. mywindow = OBJ_NEW('IDLgrWindow', DIMENSIONS=[200, 200])
  29. myview = OBJ_NEW('IDLgrView', VIEWPLANE_RECT=[-1, -1, 2, 2], $
  30.     ZCLIP=[2.0, -2.0], COLOR=[200,200,0])
  31. mymodel = OBJ_NEW('IDLgrModel')
  32.  
  33. myview -> Add, mymodel
  34. mymodel -> Add, myvolume
  35. mymodel -> Rotate, [1, 1, 1], 45
  36.  
  37. ; Draw the volume object.
  38. mywindow -> Draw, myview
  39.  
  40. ; Prompt for user input before proceeding.
  41. var=''
  42. READ, var, PROMPT='Press Return to set opacities'
  43.  
  44. ; Set opacities of the volumes and redraw.
  45. opac = bytarr(256)
  46. opac[0:127] = bindgen(128)/8
  47. opac[255] = 255
  48. opac[128] = 255
  49. myvolume -> SetProperty, OPACITY_TABLE0=opac
  50. mywindow -> Draw, myview
  51.  
  52. ; Prompt for user input before proceeding.
  53. READ, var, PROMPT='Press Return to set colors'
  54.  
  55. ; Set colors of the volumes and redraw.
  56. rgb = bytarr(256, 3)
  57. rgb[0:127, 0] = bindgen(128)
  58. rgb[0:127, 1] = bindgen(128)
  59. rgb[0:127, 2] = bindgen(128)
  60. rgb[128, *] = [255, 0, 0]
  61. rgb[255, *] = [0, 0, 255]
  62. myvolume -> SetProperty, RGB_TABLE0=rgb
  63. mywindow -> Draw, myview
  64.  
  65. ; Prompt for user input before proceeding.
  66. READ, var, PROMPT='Press Return to add lighting'
  67.  
  68. ; Create a light object and redraw.
  69. myvolume -> SetProperty, AMBIENT=[100, 100, 100], LIGHTING_MODEL=1, TWO_SIDED=1
  70. lmodel = OBJ_NEW('IDLgrModel')
  71. myview -> add, lmodel
  72. light = OBJ_NEW('IDLgrLight', TYPE=2, LOCATION=[0, 0, 1], COLOR=[255, 255, 255])
  73. lmodel -> Add, light
  74. mywindow -> Draw, myview
  75.  
  76. ; Prompt for user input before proceeding.
  77. READ, var, PROMPT='Press Return to use MIP compositing'
  78.  
  79. ; Change compositing function and redraw.
  80. myvolume -> SetProperty, COMPOSITE_FUNCTION=1, LIGHTING_MODEL=0
  81. mywindow -> Draw, myview
  82.  
  83. ; Prompt for user input before proceeding.
  84. READ, var, PROMPT='Press Return to destroy objects'
  85.  
  86. ; Destroy the objects.
  87. OBJ_DESTROY, myview
  88. OBJ_DESTROY, mywindow
  89.  
  90. END
  91.